#include <stdio.h>
#include <stdlib.h>

#define MaxSize 10
#define OK 1

//学生结构体
typedef struct {
    int id;
    int age;
}Student;

// 静态线性表结构体
typedef struct {
    int data[MaxSize]; //用静态数组存放数据元素
    int length;
}SqlList;

//动态线性表结构体
typedef struct {
    Student *data;
    int Max;
    int length;
}DynaList;

//----------------------------

// 初始化动态线性表
void InitDynaList(DynaList *L);
void IncreaseSize(DynaList *L,int len);
// 初始化静态线性表
void InitList(SqlList *L);
void ListInsert(SqlList *L,int i,int e);
//----------------------------


int main(void) {
    // 静态线性表
    SqlList SL;
    InitList(&SL);

    // 动态线性表
    DynaList DL;
    InitDynaList(&DL);
    IncreaseSize(&DL,10);
    printf("%d",DL.Max);

    return 0;
}

//----------------------------
/**
 * 静态线性表的基本操作
 * 2025.4.12
 * by yang
 */
//初始化静态线性表
void InitList(SqlList *L) {
    for (int i = 0; i < MaxSize; i++) {
        L->data[i] = 0;
    }
    L->length = 0;
}
//插入操作 i为位序
void ListInsert(SqlList *L,int i,int e) {
    for (int j = L->length;j>=i;j--) {
        L->data[j]=L->data[j-1];
    }
    L->data[i-1]=e;
    L->length++;
}

//顺序表删除
void ListDelete(SqlList *L,int i,int *e) {
    //判断i的范围

    //将被删除的元素赋值给e
    e=L->data[i-1];
    //注意这边这个j=i，因为如果j=i-1到末尾可能会越界，单位统一
    for (int j = i;j<L->length;j++) {
        L->data[j-1]=L->data[j];
    }
    L->length--;
}

//按位查找
int GetElem(SqlList *L,int i) {
    return L->data[i-1];
}

//按值查找,返回的是位序
int LocateElem(SqlList L,int e) {
    for (int i=0;i<L.length;i++) {
        //如果是对比一个结构，则需要一个元素一个元素比较
        if (e==L.data[i]) {
            return i+1;
        }
    }
    return 0;
}

/**
 * 动态线性表的基本操作
 * 2025.4.12
 * by yang
 */

//初始化动态线性表
void InitDynaList(DynaList *L) {
    //10是默认初始大小
    L->data=(Student *)malloc(10*sizeof(Student));
    L->length=0;
    L->Max=10;
}

//增加动态数组的长度
void IncreaseSize(DynaList *L,int len) {
    //重新申请一块内存，复制原来的数据到新的内存，在释放原来的内存
    Student *p = L->data;
    L->data=(Student *)malloc(len*sizeof(Student));
    for (int i=0;i< L->length;i++) {
        L->data[i]=p[i];
    }
    L->Max=L->Max+len;
    free(p);
}

//按位查找
Student DynaGetElem(DynaList *L,int i) {
    //这个data是指针，但是也能用类似数组的方式访问
    return L->data[i-1];
}



